package br.ucb.cesbdao.utilBeans;

import java.util.ArrayList;
import java.util.Date;

import javax.swing.JTable;

import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.model.EncaminhamentoModel;
import br.ucb.cesbdao.model.TipoEncaminhamentoDoAtendimentoModel;
import br.ucb.cesbdao.model.impl.EncaminhamentoModelImpl;
import br.ucb.cesbdao.model.impl.TipoEncaminhamentoDoAtendimentoModelImpl;
import br.ucb.cesbdao.modeloTabelas.ModeloTabelaEncaminhamento;
import br.ucb.cesbdao.relatoriosDTO.EncaminhamentoDTO;
import br.ucb.cesbdao.relatoriosDTO.EncaminhamentoRl;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.servicos.Servicos;
import br.ucb.cesbdao.visao.Visao;

public class EncaminhamentoUtil {
	public static void cadastraEncaminhamento(String descricao) {
		EncaminhamentoModel model = new EncaminhamentoModelImpl();
		if(descricao.isEmpty()){
			Visao.showMessageError(EnumMensagens.MSG_ALERTA_ENCAMINHAMENTO.getMensagem(),"Erro");
			return;
		}
		model.addEncaminhamento(descricao);
	}

	public static void editarDesc(JTable jtEncaminha, ModeloTabelaEncaminhamento modeloTabelaEncaminhamento ){
		EncaminhamentoModel model = new EncaminhamentoModelImpl();
		String desc = Servicos.getString("Editar Encaminhamento","Editar",modeloTabelaEncaminhamento.getEncaminhamentoAt(jtEncaminha.getSelectedRow()).getDescricao());
		if(desc == null)
			return; 
		model.upDesc(desc,modeloTabelaEncaminhamento.getEncaminhamentoAt(jtEncaminha.getSelectedRow()).getIdTipoEncaminha());
	}

	public static void dell(JTable jtEncaminha, ModeloTabelaEncaminhamento modeloTabelaEncaminhamento ) {
		EncaminhamentoModel model = new EncaminhamentoModelImpl();
		TipoEncaminhamentoDoAtendimentoModel modelTp = new TipoEncaminhamentoDoAtendimentoModelImpl();
		if(jtEncaminha.getSelectedRow() < 0){
			Visao.showMessageWarning(EnumMensagens.MSG_ALERTA_ENC_N_SELECIONADO.getMensagem(), "Aviso do sistema" );
			return;
		}
		if(!Visao.showYesNo(EnumMensagens.MSG_Q_CONFIRMACAO_DELETAR_ENC.getMensagem()+" \n"+modeloTabelaEncaminhamento.getEncaminhamentoAt(jtEncaminha.getSelectedRow()).getIdTipoEncaminha()+" ?","Confirmação"))
			return;
		modelTp.DellByIdEncaminha(modeloTabelaEncaminhamento.getEncaminhamentoAt(jtEncaminha.getSelectedRow()).getIdTipoEncaminha());
		model.delEncaminhamento(modeloTabelaEncaminhamento.getEncaminhamentoAt(jtEncaminha.getSelectedRow()).getIdTipoEncaminha());
	}

	public static void add(){
		EncaminhamentoModel model = new EncaminhamentoModelImpl();
		String encaminhamento = Servicos.getString("Novo Encaminhamento","Novo Encaminhamento");
		if(encaminhamento == null)
			return;
		model.addEncaminhamento(encaminhamento);
	}

	public static ArrayList<EncaminhamentoDTO> pegaDTO(ArrayList<EncaminhamentoRl> encaminhamentoRls) {
		ArrayList<EncaminhamentoDTO> tos = new ArrayList<EncaminhamentoDTO>();		
		
		for (EncaminhamentoRl encaminhamentoRl : encaminhamentoRls) {
			EncaminhamentoDTO eto = converteRlTo(encaminhamentoRl);
			
			if(tos.contains(eto))
				tos = combinar(eto,tos);
			else
				tos.add(eto);
		}
		return tos;
	}

	private static ArrayList<EncaminhamentoDTO> combinar(EncaminhamentoDTO eto, ArrayList<EncaminhamentoDTO> tos) {
		
		ArrayList<EncaminhamentoDTO> encaminhamentoTOs = new ArrayList<EncaminhamentoDTO>(tos);
		
		for (EncaminhamentoDTO encaminhamentoTO : tos) {
			if(encaminhamentoTO.equals(eto)){
				 EncaminhamentoDTO soma = soma(encaminhamentoTO,eto);
				 encaminhamentoTOs.remove(encaminhamentoTO);
				 encaminhamentoTOs.add(soma);
			}
		}
		return encaminhamentoTOs;
		
	}

	private static EncaminhamentoDTO soma(EncaminhamentoDTO encaminhamentoTO,
			EncaminhamentoDTO eto) {
		
		
		return new EncaminhamentoDTO(eto.getDescricao(),
				encaminhamentoTO.getJan()+eto.getJan() ,
				encaminhamentoTO.getFev()+eto.getFev() ,
				encaminhamentoTO.getMar()+eto.getMar() ,
				encaminhamentoTO.getAbr()+eto.getAbr() ,
				encaminhamentoTO.getMai()+eto.getMai() ,
				encaminhamentoTO.getJun()+eto.getJun() ,
				encaminhamentoTO.getJul()+eto.getJul() ,
				encaminhamentoTO.getAgo()+eto.getAgo() ,
				encaminhamentoTO.getSet()+eto.getSet() ,
				encaminhamentoTO.getOut()+eto.getOut() ,
				encaminhamentoTO.getNov()+eto.getNov() ,
				encaminhamentoTO.getDez()+eto.getDez()
				);
	}

	private static EncaminhamentoDTO converteRlTo(
			EncaminhamentoRl encaminhamentoRl) {
		
		
		Date data = DateUtil.parseData(DateUtil.formatDateOut(encaminhamentoRl.getData()));
		EncaminhamentoDTO encaminhamentoTO = new EncaminhamentoDTO();
		encaminhamentoTO.setDescricao(encaminhamentoRl.getDescricao());
		
		switch (DateUtil.getMes(data)) {
		case 1:
			encaminhamentoTO.setJan(encaminhamentoRl.getQuant());
			break;
		case 2:
			encaminhamentoTO.setFev(encaminhamentoRl.getQuant());
			break;
		case 3:
			encaminhamentoTO.setMar(encaminhamentoRl.getQuant());
			break;
		case 4:
			encaminhamentoTO.setAbr(encaminhamentoRl.getQuant());
			break;
		case 5:
			encaminhamentoTO.setMai(encaminhamentoRl.getQuant());
			break;
		case 6:
			encaminhamentoTO.setJun(encaminhamentoRl.getQuant());
			break;
		case 7:
			encaminhamentoTO.setJul(encaminhamentoRl.getQuant());
			break;
		case 8:
			encaminhamentoTO.setAgo(encaminhamentoRl.getQuant());
			break;
		case 9:
			encaminhamentoTO.setSet(encaminhamentoRl.getQuant());
			break;
		case 10:
			encaminhamentoTO.setOut(encaminhamentoRl.getQuant());
			break;
		case 11:
			encaminhamentoTO.setNov(encaminhamentoRl.getQuant());
			break;
		case 12:
			encaminhamentoTO.setDez(encaminhamentoRl.getQuant());
		}
		
		return encaminhamentoTO;
	}



}
